package top.jacktgq.candychat.service;

import top.jacktgq.candychat.pojo.ChatMsg;
import top.jacktgq.candychat.pojo.FriendsRequest;
import top.jacktgq.candychat.pojo.Userinfo;
import top.jacktgq.candychat.pojo.vo.FriendRequestVO;
import top.jacktgq.candychat.pojo.vo.MyFriendVO;

import java.util.List;

/**
 * @Author CandyWall
 * @Date 2021/2/8--20:07
 * @Description
 */
public interface UserinfoService {
    /**
     *
     * @param username
     * @return 判断用户名是否存在
     */
    boolean queryUsernameIfExist(String username);

    /**
     * 根据账号密码查询用户信息
     * @param userinfo
     */
    Userinfo queryUserinfo(Userinfo userinfo);

    /**
     * 用户登录：验证账号密码是否正确
     *
     * @param userinfo
     * @return
     */
    Userinfo login(Userinfo userinfo);

    /**
     * 用户注册
     * @param userinfo
     */
    void regist(Userinfo userinfo);

    /**
     * 设置图片的路径
     * @param userinfo
     * @return
     */
    Userinfo setFaceImageUrl(Userinfo userinfo);

    /**
     * 根据id查询用户信息
     * @param userId
     * @return
     */
    Userinfo queryUserinfoById(String userId);

    /**
     * 设置昵称
     * @param userinfo
     * @return
     */
    Userinfo setNickname(Userinfo userinfo);

    /**
     * 前置条件查询
     *      1、搜索的用户不存在，返回[无此用户]
     *      2、搜索的用户是你自己，返回不能[添加自己]
     *      3、搜索的用户已经是我的好友，返回[该用户已经是你的好友]
     * @param friendUsername
     * @return
     */
    Object preconditionSearchUserinfo(String myUserId, String friendUsername);

    /**
     * 发送添加好友请求
     * @param myUserId
     * @param friendUsername
     */
    void sendFriendRequest(String myUserId, String friendUsername);

    /**
     * 查询添加好友记录
     * @param acceptUserId
     * @return
     */
    List<FriendRequestVO> queryFriendRequestList(String acceptUserId);

    /**
     * 处理好友请求：接受方通过、拒绝或者忽略朋友请求
     * @param friendsRequest
     * @return
     */
    void operateFriendRequest(FriendsRequest friendsRequest);

    /**
     * 通过请求，并且将查询当前用户所有朋友
     * @param friendsRequest
     */
    List<MyFriendVO> passFriendRequest(FriendsRequest friendsRequest);

    /**
     * 加载通讯录：查询当前用户所有朋友
     * @param userId
     * @return
     */
    List<MyFriendVO> getMyFriendsByUserId(String userId);

    /**
     * Netty：保存消息
     * @param chatMsg
     */
    void saveChatMsg(ChatMsg chatMsg);

    /**
     * 批量签收消息
     * @param msgIdList
     */
    void updateMsgSignedBatch(List<String> msgIdList);

    /**
     * 用户手机端获取未签收的消息列表
     * @param userId
     * @return
     */
    List<ChatMsg> getUnsignedMsgListByUserId(String userId);
}
